 package model.swing;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import model.Player;
import model.events.PlayerEvent;
import model.iview.IPlayer;
import model.listeners.PlayerListener;
import util.Resources;

/**
 * Cette classe est un modèle pour le tableau des scores (JTable de l'interface graphique).
 * @author Lucile Gramusset et Guillaume Poussel
 *
 */
@SuppressWarnings("serial")
public class PlayersTableModel extends AbstractTableModel implements PlayerListener {

    /**
     * Liste des joueurs
     */
	private List<Player> players = new ArrayList<Player>();
	
	/**
	 * Indice du joueur en cours
	 */
	private int currentPlayer = -1;

	
	private PlayersTableModel() {
		super();
	}

	/**
	 * Construit un modèle à partir de la liste des joueurs
	 * @param players Liste des joueurs
	 */
	public PlayersTableModel(List<Player> players) {
		this();
		this.players = players;
	}

	@Override
	public int getColumnCount() {
		return 2;
	}

	@Override
	public int getRowCount() {
		return players.size();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		IPlayer player = players.get(rowIndex);
		switch (columnIndex) {
		case 0:
			if (rowIndex == currentPlayer) {
				return Resources.getString("Format.CurrentPlayer", player.getName());
			} else if (player.hasSkip()) {
			    return Resources.getString("Format.PlayerHadSkipped", player.getName());
			} else {
				return player.getName();
			}
		case 1:
			return player.getScore();
		default:
			return "";
		}
	}

	@Override
	public String getColumnName(int column) {
		switch (column) {
		case 0:
			return Resources.getString("Player.Name");
		case 1:
			return Resources.getString("Player.Score");
		default:
			return "";
		}
	}

	/**
	 * Cette méthode change l'indice du joueur en cours en fonction de l'évènement reçu.
	 */
	public void playerChanged(PlayerEvent event) {
		currentPlayer = event.getNewPlayerNumber();
	}

}
